package com.quanyan.club.service;

import com.quanyan.api.APIResponse;
import com.quanyan.club.entity.db.TbClubBindAccount;
import com.quanyan.club.entity.vo.req.ReqClubWidthdrawApplyList;
import com.quanyan.club.entity.vo.resp.RespClubBindAccount;
import com.quanyan.club.entity.vo.resp.RespClubWidthdrawApply;
import com.quanyan.club.entity.vo.resp.RespClubWidthdrawRecord;
import com.quanyan.common.Plugin.PageObj;
import com.quanyan.orderpay.response.mq.WithdrawTransferNotify;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;

/**
 * Created by zhuo.shi on 2016/6/20.
 */
public interface ClubWidthdrawService {

    /**
     *  绑定提现账号到俱乐部账户上面
     * @param clubId            俱乐部ID
     * @param uid               进行绑定动作用户ID
     * @param accountType       账号类型：1 支付宝， 2 微信
     * @param accountNo         用户微信授权后返回的openid 或 支付宝账号
     * @param name              微信或者支付宝账号认证用户姓名
     * @param phone             微信或支付宝账号对应的电话号码
     * @param accountAvatar  微信头像
     * @return                  是否绑定成功
     */
    APIResponse bindClubAccount(Integer clubId, Integer uid, Integer accountType, String accountNo, String name, String phone, String accountAvatar);

    /**
     * 解绑提现账号
     * @param clubId            俱乐部ID
     * @param uid               进行绑定动作用户ID
     * @param accountType       账号类型：1 支付宝， 2 微信
     * @param accountNo         用户微信授权后返回的openid 或 支付宝账号
     * @return                  是否解绑成功
     */
    Boolean unbindClubAccount(Integer clubId, Integer uid, Integer accountType, String accountNo);

    /**
     * 获取要解绑的俱乐部绑定账户，获取后发送手机验证码到绑定的手机，并写入phone:validatecode到redis
     * @param clubBindAccountId 俱乐部绑定的微信或支付宝账户tb_club_bind_account.id
     * @return
     */
    RespClubBindAccount getClubUnbindAccount(Integer clubBindAccountId);

    /**某个账号是否已经绑定到俱乐部*/
    Boolean isAccountBind(Integer clubId, Integer uid, Integer accountType, String accountNo);

    /**
     * 获取某个俱乐部线上可用（可提现）的金额
     * @param clubId            俱乐部ID
     * @return                  可提现金额
     */
    BigDecimal getUsableWidthdrawAmount(Integer clubId);

    /**
     * 获取俱乐部绑定的支付宝或者微信列表
     * @param clubId            俱乐部ID
     * @return                  绑定的账号
     */
    List<TbClubBindAccount> getClubBindAccounts(Integer clubId);

    /**
     * 支付宝、微信提现，先提交提现申请，需要在后台管理系统里审核后转账
     * @param clubId            俱乐部ID
     * @param amount            提现金额
     * @param accountType       提现类型 1 支付宝， 2 微信
     * @param accountNo         账号，微信openid, 支付宝账号
     * @return
     */
    Boolean applyClubWithdraw(int uid, Integer clubId, BigDecimal amount, Integer accountType, String accountNo, HttpServletRequest request);

    /**
     * 获取俱乐部提现申请列表
     */
    PageObj<List<RespClubWidthdrawApply>> getWithdrawApplies(ReqClubWidthdrawApplyList reqApplyList);

    /**
     * 微信提现审核通过
     * @param clubId            俱乐部ID
     * @param amount            提现金额
     * @param openid            用户授权的微信openid
     * @param name              提现账号对应用户姓名
     * @param applyNo           提现申请流水号
     * @return
     */
    APIResponse withdrawByWeixinPassAudit(Integer clubId, BigDecimal amount, String openid, String name, String applyNo);

    /**
     * 查询俱乐部提现记录列表
     * @param clubId            俱乐部ID
     * @param status            提现状态，处理中or完成
     * @return                  俱乐部提现记录
     */
    List<RespClubWidthdrawRecord> getClubWidthdrawRecords(Integer clubId, Integer status, Integer pageNo, Integer pageSize);

    /**
     * 计算俱乐部提现记录总个数
     * @param clubId            俱乐部ID
     * @param status            提现状态，处理中or完成
     * @return
     */
    Integer countClubWidthdrawRecords(Integer clubId, Integer status);

    /**
     * 俱乐部提现回调方法
     */
    APIResponse withdrawCallbackNotify(WithdrawTransferNotify notify);
}
